ホームに戻る
出典 :
Binding.BindsDirectlyToSource プロパティ (System.Windows.Data) | Microsoft Learn Binding.ElementName プロパティ (Windows.UI.Xaml.Data) - Windows UWP applications | Microsoft Learn RelativeSource Class (Microsoft.UI.Xaml.Data) - Windows App SDK | Microsoft Learn RelativeSource マークアップ拡張 - Windows apps | Microsoft Learn Binding.UpdateSourceTrigger プロパティ (System.Windows.Data) | Microsoft Learn BindingGroup クラス (System.Windows.Data) | Microsoft Learn BindingBase.BindingGroupName プロパティ (System.Windows.Data) | Microsoft Learn Bindingの各プロパティ(UpdateSourceTrigger,Delay,NotifyOnSourceUpdated)の動作について #C# - Qiita [WPF]忘れがち!ModeとUpdateSourceTrigger 【WPF】RelativeSource(バインディング)の使い方メモ - Qiita 【備忘録】WPFにおけるRelativeSourceについて #WPF - Qiita バインドしたデータの検証や更新を BindingGroup を使って一括で行う - present
関連 :
データバインディング バリデーション ControlTemplate DataTemplate
目次 :

BindsDirectlyToSource : オブジェクトそのものをバインドソースとするか

Binding.Path で指定するバインドソースを「オブジェクト( ViewModel / DataContext )の特定のプロパティ」ではなく「オブジェクトそのもの」としたい場合に使用する。 {Binding} または {Binding .} と記述した場合もオブジェクトをそのまま渡すことができるが、この場合はプロパティ解決が行われることがある。 このため、「プロパティ解決の介入を避け、確実にオブジェクトを渡したい場合」に用いる。 但し、DataTemplate 内で DataContext が明確にデータアイテムとなっていれば {Binding} / {Binding .} でもオブジェクトが渡るため、特殊な場合を除き指定する必要は無い。

Mode : バインディングの方向

バインディングの方向と回数を指定する。BindingMode 列挙型。
設定値 方向 回数
OneWay ソース ⇒ ターゲット 無制限
OneTime ソース ⇒ ターゲット バインド構成時のみ
OneWayToSource ターゲット ⇒ ソース 無制限
TwoWay 双方向 無制限

ElementName : バインドソースとして使用する要素名

他のUI要素の Name または x:Name を指定し、そのUI要素をバインドソースとする。 これにより、UI要素間での値の共有が簡単に行える。RelativeSource とは排他。
例(XAML)
<Slider x:Name="slider1" Minimum="1" Maximum="100"/> <TextBox Text="{Binding ElementName=slider1, Path=Value, Mode=TwoWay}"/>
上記は、Slider と TextBox の両コントロール間で値を共有する例である。 Slider の x:Name に指定した名称を、TextBox の Binding.ElementName として指定し、
の双方向( Mode=TwoWay )バインディングを構成している。 これにより、Slider で選択した値が TextBox に表示されるとともに、TextBox に値を入力した場合も Slider に反映される。

RelativeSource : バインドソースとして使用する要素を相対的に指定

他のUI要素を相対的に指定してバインドソースとする。ElementName とは排他。
例(XAML)
<Binding RelativeSource="{RelativeSource TemplatedParent}"/> <Binding RelativeSource="{RelativeSource Self}"/> <Object property="{Binding RelativeSource={RelativeSource TemplatedParent} ...}" ... />
RelativeSource を指定する際は RelativeSource マークアップ拡張( RelativeSource="{RelativeSource mode}" )を用いる。 mode には下表の参照モードを指定する。
参照モード ( RelativeSource.Mode ) 説明
FindAncestor (既定値) 先祖のプロパティを参照(後述)
Self 自身のプロパティを参照
PreviousData 直前の要素のプロパティを参照
TemplatedParent テンプレートの適用先(親)のプロパティを参照(後述)

FindAncestor : 先祖を参照

指定された条件に合致するまで親要素を辿り、該当する要素のプロパティを参照する。
AncestorType
参照先要素の型
AncestorLevel
自身を基準として、何番目の要素を参照するか
AncestorLevel
n (1以上の自然数) 指定なし
AncestorType T (UI要素の型) n 番目に見つかった T 最初に見つかった T
指定なし n 番目の要素 直接の親
例(XAML)
画像 上記のコードでは最初に見つかった Canvas の ActualWidth 、ActualHeight を Border の Width および Height とバインドする。 Border の下位にある InkCanvas も同様である。

TemplatedParent : テンプレートの親を参照

画像 ControlTemplate または DataTemplate 内部から、当該テンプレートを適用した要素のプロパティを参照する際に用いる。 上記のコードではテンプレート( TargetType="Button" )中で TemplatedParent を用いているため、テンプレートが適用された Button の Content プロパティがバインドソースとなる。

UpdateSourceTrigger : バインドソースを更新する契機

バインディングターゲットの値が変更された際に、内容をソースに反映するタイミングを制御する。UpdateSourceTrigger 列挙型。 通常、多くのコントロールではターゲットの変更が即座に反映されるが、Text プロパティは例外的にコントロールがフォーカスを失った際に反映される。 このため TextBox の入力を検証したり、入力に連動してコントロールの状態を変更する場合などはこのプロパティを変更し、ソースの変更が即座に行われるようにする。
設定値 説明 備考
Default (既定値) ターゲットプロパティごとの既定値を適用 Text プロパティは LostFocus、それ以外は PropertyChanged
PropertyChanged ターゲットの変更を即座にソースに反映
LostFocus コントロールがフォーカスを失った際に反映
Explicit UpdateSource() メソッドがコールされた際に反映

Delay : ソース更新前の待機時間

ソースを更新する契機の発生後、指定された時間だけ待機してからソースを更新する。ミリ秒単位で指定。

NotifyOnSourceUpdated /
NotifyOnTargetUpdated : プロパティ更新時にイベントを発行するか

ソースおよびターゲットの更新時にイベントを発行する場合に指定する。
説明 発生するイベント
NotifyOnSourceUpdated ソース更新時にイベントを発行する Binding.SourceUpdated
NotifyOnTargetUpdated ターゲット更新時にイベントを発行する Binding.TargetUpdated